
#include "euleroperator.h"

class HEDModel;
class HalfEdge;
class Edge;

class MEV : public EulerOperator
{

public:

  // corresponds to the smev of Mantyla
  MEV(HEDModel& _model, int _s, int _v1, int _v4, double _x, double _y, double _z);
  // corresponds to the mev of Mantyla
  MEV(HEDModel& _model, int _s, int _f1, int _f2, int _v1, int _v2, int _v3, int _v4, double _x, double _y, double _z);
  // corresponds to the lmev of Mantyla
  MEV(HalfEdge* _he1, HalfEdge* _he2, int _v, double _x, double _y, double _z);
  void execute();
  void unExecute();

private:
  void checksInputData(HEDModel& _model, int _s, int _f1, int _f2, int _v1, int _v2, int _v3);

private:
  HalfEdge* he1;
  HalfEdge* he2;
  int v;
  double x;
  double y;
  double z;

  // necessary for undo
  Edge* edge;
  int v1;
  HEDModel* model;


};